import io from 'socket.io-client'

const baseUrl =
  import.meta.env.VITE_REQUESTURL === '/test'
    ? `${import.meta.env.VITE_SOCKETURL}/im/ai`
    : `${window.location.protocol}//${window.location.hostname}:443/im/ai`

class UkSocket {
  constructor(url, options = {}) {
    this.url = url || baseUrl
    this.options = options
    this.socket = null

    this.init()
  }

  init() {
    this.socket = io(this.url, {
      // port: 443,
      // path: '/im/ai',
      secure: true, // 使用HTTPS
      transports: ['websocket'], // 传输方式
      autoConnect: true, // 自动连接
      reconnection: true, // 启用重连
      reconnectionAttempts: 5, // 重连尝试次数
      reconnectionDelay: 1000, // 重连延迟时间（毫秒）
      timeout: 20000, // 连接超时时间
      rejectUnauthorized: false, // 允许自签名证书
      forceNew: true, // 强制创建新连接
      // query: {}
      ...this.options
    })
  }

  send(...option) {
    let type = 'message'
    let params = {}

    if (typeof option[0] === 'string') {
      type = option[0]
      params = option[1]
    } else {
      params = option[0]
    }

    this.socket.emit(type, params)
  }

  /**
   * 当与服务器断开连接时触发 disconnect
   * 接收对话消息 message
   * 接收客服状态信息 agentstatus
   * 当与服务器建立连接时触发 connect
   * 接收系统状态信息 status
   */
  on(type, callback) {
    this.socket.on(type, callback)
  }

  destory() {
    this.socket.disconnect()
  }
}

export default (url, options) => {
  return new UkSocket(url, options)
}
